package cn.zysheep.controller;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;

import java.util.*;

/**
 * @ClassName: EasyExcelListener
 * @Author: lyw
 * @Date: 2023/11/14 15:31
 * @Description: TODO(一句话描述该类的功能)
 */
@Slf4j
public class EasyExcelListener extends AnalysisEventListener<Object> {

    /**
     * 创建list集合封装最终的数据
     */
    private List<Object> list = new ArrayList<>();
    /**
     * sheet页索引
     */
    private int sheetNo = 0;


    /**
     *  每一条数据解析都会来调用
     * @param context
     */
    @Override
    public void invoke(Object t, AnalysisContext context) {
        log.info("解析到一条数据:{}", JSON.toJSONString(t));

        // 读取excle内容
        int currentSheetNo = context.readSheetHolder().getSheetNo();
        if (currentSheetNo != sheetNo) {
            // 如果不根据sheet页索引更新状态重新创建list，list会反复添加前面的sheet页对象值
            list = new ArrayList<>();
            sheetNo = currentSheetNo;
        }
        list.add(t);
    }

    /**
     * 读取excel表头信息
     * @param headMap
     * @param context
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
    }

    /**
     * 读取完成后执行
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        log.info("所有数据解析完成！");
    }

    /**
     * 将表格转化为map集合（复杂excel读取用此方法）
     *
     * @return map集合
     */
    public List<HashMap> getListMap() {
        String jsonObj = JSON.toJSONString(list);
        return JSON.parseArray(jsonObj, HashMap.class);
    }

}

